project('plusassign', 'c')

x = []

x += 'a'

if x.length() != 1
  error('Incorrect append')
endif

if x[0] != 'a'
  error('Incorrect append 2.')
endif

y = x

x += 'b'

if y.length() != 1
  error('Immutability broken.')
endif

if y[0] != 'a'
  error('Immutability broken 2.')
endif

if x.length() != 2
  error('Incorrect append 3')
endif

if x[0] != 'a'
  error('Incorrect append 4.')
endif

if x[1] != 'b'
  error('Incorrect append 5.')
endif

# Now with evil added: append yourself.

x += x

if x.length() != 4
  error('Incorrect selfappend.')
endif

# += on strings

bra = 'bra'
foo = 'A'
foo += bra
foo += 'cada'
foo += bra
assert (foo == 'Abracadabra', 'string += failure [@0@]'.format(foo))
assert (bra == 'bra', 'string += modified right argument!')
foo += ' ' + foo
assert (foo == 'Abracadabra Abracadabra', 'string += failure [@0@]'.format(foo))

# += on ints

foo = 5
foo += 6
assert (foo == 11, 'int += failure [@0@]'.format(foo))
bar = 99
foo += bar
assert (foo == 110, 'int += failure [@0@]'.format(foo))
assert (bar == 99, 'int += modified right argument"')
bar += foo + 1
assert (bar == 210, 'int += failure [@0@]'.format(bar))
assert (foo == 110, 'int += modified right argument"')
